﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace AzaEngine
{
    /**
     * Tipo de mensagens.
     * - None: Nenhum tipo especial
     * - Warning: Mensagens de avisos
     * - Error: Mensagens de erros
     * - Hint: Mensagens de informações
     * - InternalError: Mensagens de erros internos
     */
    public enum MessageType
    {
        None = 0,      /**< enum value None. */
        Warning,        /**< enum value Warning. */
        Error,          /**< enum value Error. */
        Hint,           /**< enum value Hint. */
        InernalError    /**< enum value InernalError. */
    }

    /**
     * Lista de mensagens
     */
    public class Message
    {
        public string Text;
        public MessageType Type;

        public Message(MessageType type)
        {
            Type = type;
        }

        public Message(MessageType type, string text)
        {
            Type = type;
            Text = text;
        }

        public void SetText(string text)
        {
            Text = text;
        }
    }

    /**
     * Contém 3 grupos de mensagens: Errors, Warnings, Hints
     * @see Message
     */
    public class Messages : List<Message>
    {
        /**
         * Adiciona uma mensagem de Warning na Lista de Errors
         * @param text Mensagem de erro que será incluída
         */
        public void AddError(string text)
        {
            this.Add(new Message(MessageType.Error, text));
        }

        /**
         * Adiciona uma mensagem de Warning na Lista de Warnings
         * @param text Mensagem de warning que será incluída
         */
        public void AddWarning(string text)
        {
            this.Add(new Message(MessageType.Warning, text));
        }

        /**
         * Adiciona uma mensagem de Hint na Lista de Hints
         * @param text Mensagem de hint que será incluída
         */
        public void AddHint(string text)
        {
            this.Add(new Message(MessageType.Hint, text));
        }

        /**
         * Adiciona uma mensagem de Internal Error na Lista de Hints
         * @param text Mensagem de Internal Error que será incluída
         */
        public void AddInternalError(string text)
        {
            this.Add(new Message(MessageType.InernalError, text));
        }
    }
}
